/*
 * Quercia Luciano
 * Algoritmi e Strutture Dati
 * a.a. 2009-10
 */


#include <iostream>
using std::cout;
using std::cin;
using std::endl;


#include "alberobin.h"


int main() {

	try {
		typedef Alberobin<char>::posizione posizione;

		Alberobin<char> tree1, tree2;

		posizione pos;

		tree2.insBinRadice('l');
		tree2.insFiglioSinistro( tree2.binRadice(), 'o' );
		tree2.insFiglioDestro( tree2.binRadice(), 'q' );

		tree1.insBinRadice('h');
		tree1.insFiglioSinistro( tree1.binRadice(), 'a' );
		tree1.insFiglioDestro( tree1.binRadice(), 'c' );

		pos = tree1.figlioSinistro( tree1.binRadice() );
		tree1.insFiglioSinistro(pos, 'd');
		tree1.insFiglioDestro(pos, tree2);
		pos = tree1.figlioDestro( tree1.binRadice() );
		tree1.insFiglioSinistro(pos, 'p');
		tree1.insFiglioDestro(pos, 's');


		tree1.print();
		cout << endl;
		tree1.visitaPreordine( tree1.binRadice() );
		cout << endl;
		tree1.visitaPostordine( tree1.binRadice() );
		cout << endl;
		tree1.visitaSimmetrica( tree1.binRadice() );

		cout << endl;
		cout << endl;
		cout << endl;
		pos = tree1.binRadice();
		pos = tree1.figlioSinistro( pos );
		tree1.cancSottoBinAlbero( pos );
		tree1.visitaPreordine();

	} catch (char const *msg) {
		cout << msg;
	}

	return 0;
}
